#!/bin/bash

# blog-admin Jenkins 构建和部署脚本
# 这个脚本包含了构建和部署的所有步骤

set -e  # 遇到错误立即退出

# 使用 Jenkins 的 WORKSPACE 环境变量，如果没有则使用默认路径
WORKSPACE_DIR="${WORKSPACE:-/var/jenkins_home/workspace/blog-admin}"
# 项目目录：工作空间下的 blog-admin 子目录
PROJECT_DIR="${WORKSPACE_DIR}/blog-admin"

# 如果 blog-admin 子目录不存在，尝试使用工作空间根目录
if [ ! -d "$PROJECT_DIR" ]; then
    PROJECT_DIR="$WORKSPACE_DIR"
    echo "警告: 未找到 blog-admin 子目录，使用工作空间根目录: $PROJECT_DIR"
fi

BUILD_DIR="${PROJECT_DIR}/dist"
LOG_DIR="/var/jenkins_home/logs"
BUILD_LOG="${LOG_DIR}/blog-admin-build-$(date +%Y%m%d-%H%M%S).log"

# 创建日志目录
mkdir -p "$LOG_DIR"

# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$BUILD_LOG"
}

log_error() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $1" | tee -a "$BUILD_LOG" >&2
}

log_success() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [SUCCESS] $1" | tee -a "$BUILD_LOG"
}

log_info() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] $1" | tee -a "$BUILD_LOG"
}

log_info "========================================"
log_info "开始构建 blog-admin 项目"
log_info "项目目录: $PROJECT_DIR"
log_info "构建日志: $BUILD_LOG"
log_info "========================================"

# 进入项目目录
cd "$PROJECT_DIR" || {
    log_error "无法进入项目目录: $PROJECT_DIR"
    exit 1
}

# 步骤1: 安装依赖
log_info "步骤1: 安装依赖..."
if [ ! -d "node_modules" ]; then
    log_info "node_modules 不存在，执行 npm install..."
    npm install 2>&1 | tee -a "$BUILD_LOG"
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
        log_error "npm install 失败"
        exit 1
    fi
    log_success "依赖安装完成"
else
    log_info "node_modules 已存在，跳过安装（如需重新安装，请删除 node_modules 目录）"
fi

# 步骤2: 构建项目
log_info "步骤2: 构建项目..."
log_info "设置Node内存限制为2GB..."
export NODE_OPTIONS="--max-old-space-size=2048"
log_info "执行 npm run build..."
npm run build 2>&1 | tee -a "$BUILD_LOG"
if [ ${PIPESTATUS[0]} -ne 0 ]; then
    log_error "构建失败"
    exit 1
fi

# 检查构建结果
if [ ! -d "$BUILD_DIR" ]; then
    log_error "构建目录不存在: $BUILD_DIR"
    exit 1
fi

if [ -z "$(ls -A $BUILD_DIR)" ]; then
    log_error "构建目录为空: $BUILD_DIR"
    exit 1
fi

log_success "构建完成，构建目录: $BUILD_DIR"

# 步骤3: 部署项目
log_info "步骤3: 部署项目..."
if [ -f "${PROJECT_DIR}/docker-start.sh" ]; then
    log_info "执行部署脚本..."
    chmod +x "${PROJECT_DIR}/docker-start.sh"
    "${PROJECT_DIR}/docker-start.sh" 2>&1 | tee -a "$BUILD_LOG"
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
        log_error "部署失败"
        exit 1
    fi
    log_success "部署完成"
else
    log_error "部署脚本不存在: ${PROJECT_DIR}/docker-start.sh"
    exit 1
fi

log_info "========================================"
log_success "构建和部署完成！"
log_info "构建日志: $BUILD_LOG"
log_info "========================================"

